#!/usr/bin/python
# -*- coding: utf-8 -*-
# @version        : 1.0
# @Create Time    : 2023/6/21 10:08 
# @File           : mian.py
# @IDE            : PyCharm
# @desc           : 清理服务器上的临时文件（/temp文件夹下的文件）
import time
import os
import time
import argparse
from datetime import datetime, timedelta
from core.logger import logger

        
class ClearTemp:

    def __init__(self, folder_name: str):
        self.folder_name = folder_name
        
    def delete_old_files_and_empty_dirs(self, directory, days=2, dry_run=False):
        """
        删除指定目录中创建时间超过指定天数的文件，并删除所有空的子目录

        参数:
            directory (str): 要扫描的目录路径
            days (int): 时间阈值（天），默认2天
            dry_run (bool): 如果为True，只显示将要删除的文件和目录而不实际删除
        """
        # 计算时间阈值（当前时间减去指定天数）
        threshold_time = time.time() - (days * 24 * 3600)

        # 统计变量
        deleted_files_count = 0
        deleted_dirs_count = 0
        total_size = 0

        # 首先遍历所有文件，删除旧文件
        for root, dirs, files in os.walk(directory, topdown=False):
            for file in files:
                file_path = os.path.join(root, file)

                try:
                    # 获取文件创建时间
                    creation_time = os.path.getmtime(file_path)
                    # print('creation_time = ', datetime.fromtimestamp(creation_time))

                    # 检查文件是否早于阈值时间
                    if creation_time < threshold_time:
                        # 获取文件大小
                        file_size = os.path.getsize(file_path)

                        if dry_run:
                            # 如果是试运行，只显示信息
                            logger.info(f"[试运行] 将删除文件: {file_path} (创建时间: {datetime.fromtimestamp(creation_time)})")
                        else:
                            # 删除文件
                            os.remove(file_path)
                            logger.info(f"已删除文件: {file_path} (创建时间: {datetime.fromtimestamp(creation_time)})")

                        deleted_files_count += 1
                        total_size += file_size

                except Exception as e:
                    logger.info(f"处理文件 {file_path} 时出错: {e}")

        # 然后遍历所有目录，删除空目录
        for root, dirs, files in os.walk(directory, topdown=False):
            for dir_name in dirs:
                dir_path = os.path.join(root, dir_name)

                try:
                    # 检查目录是否为空
                    if not os.listdir(dir_path):
                        if dry_run:
                            logger.info(f"[试运行] 将删除空目录: {dir_path}")
                        else:
                            os.rmdir(dir_path)
                            logger.info(f"已删除空目录: {dir_path}")
                        deleted_dirs_count += 1
                except Exception as e:
                    logger.error(f"处理目录 {dir_path} 时出错: {e}")

        # 输出总结信息
        logger.info(f"\n操作完成:")
        logger.info(f"扫描目录: {directory}")
        logger.info(f"时间阈值: {days} 天")
        logger.info(f"删除文件数: {deleted_files_count}")
        logger.info(f"删除空目录数: {deleted_dirs_count}")
        logger.info(f"释放空间: {total_size / (1024 * 1024):.2f} MB")
        if dry_run:
            logger.info("模式: 试运行（未实际删除任何内容）")

    def main(self) -> str:
        """
        主入口函数
        :return:
        """
        logger.info('{}, 定时任务ClearTemp实例，参数为: {}'.format(datetime.now(), self.folder_name))
        
        folder_path = f"F:\\code\\faskapi-study\\kinit\\kinit-api\\{self.folder_name}"
        logger.info(f"开始遍历文件夹: {os.path.abspath(folder_path)}")
        self.delete_old_files_and_empty_dirs(folder_path)
        
        
        return '任务执行完成'